// ============================== 导入依赖 ============================== //

import CORE from '../UTIL'
import util from './util'

// ============================== 状态集 ============================== //

const state = {
  // —————————————————————————————— 数据 —————————————————————————————— //

  /**
   * 映射
   */
  MAP: {
    //
  },

  /**
   * 字典
   */
  DICT: {
    //
  },

  /**
   * 初始单项
   *
   * 1. 初始存在，才能响应
   * 2. CORE.mixStore(store) 时使用
   * 3. setOne() 重置时使用
   * 4. openAdd() 新增时使用
   */
  INIT_ONE: {},

  /**
   * 弹窗单项
   */
  one: {
    id: '',
  },

  // —————————————————————————————— 弹窗 —————————————————————————————— //

  /**
   * 弹窗可见
   */
  visible: false,

  /**
   * 弹窗类型 ( 查 show / 增 add / 改 edit / 删 del / 通过 pass / 拒绝 rej / 提交 submit )
   */
  modal: '',
}

// ============================== 计算属性 ============================== //

const getters = {
  /**
   * 是否为查看
   */
  isShow: (state) => state.modal === 'show',

  /**
   * 是否为增加
   */
  isAdd: (state) => state.modal === 'add',

  /**
   * 是否为修改
   */
  isEdit: (state) => state.modal === 'edit',

  /**
   * 是否为修改
   */
  isSubmit: (state) => state.modal === 'submit',
}

// ============================== 同步更新 ============================== //

const mutations = {
  // —————————————————————————————— 弹窗 —————————————————————————————— //

  /**
   * 打开详情弹窗
   */
  openShow(state, one) {
    util.open('show', state, one)
  },

  /**
   * 打开新增弹窗
   */
  openAdd(state, one) {
    util.open('add', state, one)
  },

  /**
   * 打开修改弹窗
   */
  openEdit(state, one) {
    util.open('edit', state, one)
  },

  /**
   * 打开删除弹窗
   */
  openDel(state, one) {
    util.open('del', state, one)
  },

  /**
   * 打开通过弹窗
   */
  openPass(state, one) {
    util.open('pass', state, one)
  },

  /**
   * 打开拒绝弹窗
   */
  openRej(state, one) {
    util.open('rej', state, one)
  },

  /**
   * 打开提交弹窗
   */
  openSubmit(state, one) {
    util.open('submit', state, one)
  },

  /**
   * 打开新单项的查看弹窗
   */
  openNewOneShow(state, one) {
    util.openNewOne('show', state, one)
  },

  /**
   * 打开新单项的新增弹窗
   */
  openNewOneAdd(state, one) {
    util.openNewOne('add', state, one)
  },

  /**
   * 打开新单项的修改弹窗
   */
  openNewOneEdit(state, one) {
    util.openNewOne('edit', state, one)
  },

  /**
   * 打开弹窗 ( data 为 undefined / modal / one / [modal, one] )
   */
  openModal(state, data) {
    if (CORE.isArray(data)) util.open(data[0], state, data[1])
    else if (CORE.isString(data)) util.open(data, state)
    else if (CORE.isJSON(data)) util.open('', state, data)
    else util.open('', state)
  },

  /**
   * 关闭弹窗
   */
  closeModal(state) {
    state.visible = false
    setTimeout(() => (state.modal = ''), 300) // 延时重置弹窗类型
  },

  /**
   * 设置弹窗类型
   */
  setModal(state, modal) {
    state.modal = modal || ''
  },

  /**
   * 设置单项
   */
  setOne(state, one) {
    util.setClone(state, one, 'one')
  },
}

// ============================== 异步调用 ============================== //

const actions = {}

// ============================== 导出仓库 ============================== //

export default { state, getters, mutations, actions }
